package org.banxico.dgef.etasaho.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.banxico.dgef.etasaho.bean.JobDS;
import org.banxico.dgef.etasaho.bean.JobLog;
import org.banxico.dgef.etasaho.bean.ParametroDS;
import org.banxico.dgef.etasaho.exceptions.ETasahoException;
import org.banxico.dgef.etasaho.interfaces.Detonable;
import org.banxico.util.ReturnedObject;
import org.banxico.util.SpringContext;

public class PruebaSpringBean {
	protected final static Log logger = LogFactory.getLog(PruebaSpringBean.class);

	
	public static void main(String[] args) {
		SpringContext.load("beans.xml");
		//runJobAsincronoTardado();
		//creditosNR();
		//runGuardaProyecto("D:\\Patito.txt");
		pruebaJob();
		//runJobSincrono_ACLME();
	}
	
	protected static void pruebaJob() {
		//Job jobPrueba = SpringContext.getBean("jobPrueba", Job.class);
		//System.out.println(jobPrueba.toString());
		// jobPrueba.ejecutaJob();
		Detonable jobProsa = SpringContext.getBean("jobProsa", JobDS.class);
		//jobProsa.ejecutaAsincrono();
//		try {
//			System.out.println(jobProsa.obtenEstado());
//		} catch (ETasahoException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		//System.out.println("----Prueba----");
		JobLog myLog = jobProsa.obtenResumenLog(JobLog.TIPO_ANY, 0);
		//System.out.print(jobProsa.toString());
		myLog.imprimeDSLog();
		System.out.println(jobProsa.obtenDetalleLog(26918));
	}
	
	protected static void pruebaLog() {
		logger.debug("Mensaje de DEBUG...");
		logger.info("Mensaje de INFO...");
		logger.warn("Mensaje de WARN...");
		logger.error("Mensaje de ERROR...");
		logger.fatal("Mensaje de FATAL...");
	}
	
	protected static void creditosNR() {
		JobDS jobCNR = new JobDS();
		jobCNR.setInstancia("040002");
		
		// Configurarlos en una tabla???
		jobCNR.setIdJob(1000);
		jobCNR.setServidor("dsdatawha");
		jobCNR.setProyecto("DGASF_CreditosNR");
		jobCNR.setNombre("CNR101_ControlNumRegistrosInstanciado");
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametroDSs = new ArrayList<ParametroDS>();
		parametroDSs.add(new ParametroDS("xFechaEnvio",       "20110630", ParametroDS.TIPO_STRING));
		parametroDSs.add(new ParametroDS("xFechaEnvioOracle", "15887",    ParametroDS.TIPO_STRING)); 
		parametroDSs.add(new ParametroDS("xLimiteUmbral",     "1",        ParametroDS.TIPO_INTEGER)); 
		parametroDSs.add(new ParametroDS("xInstancia",        "040002",   ParametroDS.TIPO_STRING));
		jobCNR.setParametros(parametroDSs);
		
		//jobCNR.imprimeParametros(jobCNR.obtenParametros());
		//jobCNR.ejecutaSincrono();
		//jobCNR.ejecutaAsincrono();
		//jobCNR.detiene();
		//jobCNR.obtenEstado();
		//System.out.println("Error al escribir en log: " + jobCNR.escribeLog("CNR revolventes...", Job.TIPO_LOG_INFO));
		//JobLog log = jobCNR.obtenResumenLog(JobLog.TIPO_INFO, 100);
		//log.imprimeDSLog();
		//System.out.println(jobCNR.obtenDetalleLog(346));
		
		// Lista los proyectos
		//List<String> proyectosDS = jobCNR.obtenProyectos();
		//if( proyectosDS != null )
		//	for(String proyecto : proyectosDS)
		//		System.out.println(proyecto);
		
		// Lista los jobs por proyecto
		//List<String> jobsDS = jobCNR.obtenJobsPorProyecto(proyectosDS.get(18));
		//if( jobsDS != null )
		//	for(String job : jobsDS)
		//		System.out.println(job);
		
		try {
			jobCNR.guardaProyectosJobsEnArchivo("D:\\ProyectosDS.txt");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void runJobSincrono_ACLME() {
		JobDS jobCNR = new JobDS();
		
		// Configurarlos en una tabla???
		jobCNR.setIdJob(1000);
		jobCNR.setServidor("dsdatawha");
		jobCNR.setProyecto("ACLME");
		jobCNR.setNombre("VCW00Control");
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametrosDS = new ArrayList<ParametroDS>();
		jobCNR.setParametros(parametrosDS);
		
		try {
			jobCNR.ejecutaSincrono();
		} catch(ETasahoException exception) {
			System.out.println(exception);
		}
	}
	
	public static void runJobSincrono() {
		JobDS jobCNR = new JobDS();
		jobCNR.setInstancia("040002");
		
		// Configurarlos en una tabla???
		jobCNR.setIdJob(1000);
		jobCNR.setServidor("dsdatawha");
		jobCNR.setProyecto("DGASF_CreditosNR");
		jobCNR.setNombre("CNR101_ControlNumRegistrosInstanciado");
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametroDSs = new ArrayList<ParametroDS>();
		parametroDSs.add(new ParametroDS("xFechaEnvio",       "20110630", ParametroDS.TIPO_STRING));
		parametroDSs.add(new ParametroDS("xFechaEnvioOracle", "15887",    ParametroDS.TIPO_STRING)); 
		parametroDSs.add(new ParametroDS("xLimiteUmbral",     "1",        ParametroDS.TIPO_INTEGER)); 
		parametroDSs.add(new ParametroDS("xInstancia",        "040002",   ParametroDS.TIPO_STRING));
		jobCNR.setParametros(parametroDSs);
		
		try {
			jobCNR.ejecutaSincrono();
		} catch (ETasahoException e) {
			e.printStackTrace();
		}
	}

	public static void runJobAsincrono() {
		JobDS jobCNR = new JobDS();
		jobCNR.setInstancia("040003");
		
		// Configurarlos en una tabla???
		jobCNR.setIdJob(1000);
		jobCNR.setServidor("dsdatawha");
		jobCNR.setProyecto("DGASF_CreditosNR");
		jobCNR.setNombre("CNR101_ControlNumRegistrosInstanciado");
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametroDSs = new ArrayList<ParametroDS>();
		parametroDSs.add(new ParametroDS("xFechaEnvio",       "20110630", ParametroDS.TIPO_STRING));
		parametroDSs.add(new ParametroDS("xFechaEnvioOracle", "15887",    ParametroDS.TIPO_STRING)); 
		parametroDSs.add(new ParametroDS("xLimiteUmbral",     "1",        ParametroDS.TIPO_INTEGER)); 
		parametroDSs.add(new ParametroDS("xInstancia",        "040003",   ParametroDS.TIPO_STRING));
		jobCNR.setParametros(parametroDSs);
		
		jobCNR.ejecutaAsincrono();
	}
	
	public static void runGuardaProyecto(String archivo) {
		JobDS jobCNR = new JobDS();
		jobCNR.setInstancia("040002");
		
		// Configurarlos en una tabla???
		jobCNR.setIdJob(1000);
		jobCNR.setServidor("dsdatawha");
		jobCNR.setProyecto("DGASF_CreditosNR");
		jobCNR.setNombre("CNR101_ControlNumRegistrosInstanciado");
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametroDSs = new ArrayList<ParametroDS>();
		parametroDSs.add(new ParametroDS("xFechaEnvio",       "20110630", ParametroDS.TIPO_STRING));
		parametroDSs.add(new ParametroDS("xFechaEnvioOracle", "15887",    ParametroDS.TIPO_STRING)); 
		parametroDSs.add(new ParametroDS("xLimiteUmbral",     "1",        ParametroDS.TIPO_INTEGER)); 
		parametroDSs.add(new ParametroDS("xInstancia",        "040002",   ParametroDS.TIPO_STRING));
		jobCNR.setParametros(parametroDSs);
		
		try {
			jobCNR.guardaProyectosJobsEnArchivo(archivo);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void runJobAsincronoTardado() {
		SpringContext.load("beans.xml");
		JobDS jobCNR = SpringContext.getBean("jobCNR101_ControlNumRegistros", JobDS.class);
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametroDSs = new ArrayList<ParametroDS>();
		parametroDSs.add(new ParametroDS("xFechaEnvio",       "20110831", ParametroDS.TIPO_STRING));
		parametroDSs.add(new ParametroDS("xFechaEnvioOracle", "15949",    ParametroDS.TIPO_STRING)); 
		parametroDSs.add(new ParametroDS("xLimiteUmbral",     "1",        ParametroDS.TIPO_INTEGER)); 
		jobCNR.setParametros(parametroDSs);
		
		jobCNR.ejecutaAsincrono();		
	}
	
	public static void runJobSincronoTardado() {
		SpringContext.load("beans.xml");
		JobDS jobCNR = SpringContext.getBean("jobCNR101_ControlNumRegistros", JobDS.class);
		
		// Configurarlos en una tabla???
		List<ParametroDS> parametroDSs = new ArrayList<ParametroDS>();
		parametroDSs.add(new ParametroDS("xFechaEnvio",       "20110831", ParametroDS.TIPO_STRING));
		parametroDSs.add(new ParametroDS("xFechaEnvioOracle", "15949",    ParametroDS.TIPO_STRING)); 
		parametroDSs.add(new ParametroDS("xLimiteUmbral",     "1",        ParametroDS.TIPO_INTEGER)); 
		jobCNR.setParametros(parametroDSs);
		
		try {
			jobCNR.ejecutaSincrono();
		} catch (ETasahoException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}
	
	public static void recibeParametros(String cadena, int numero, boolean boleano, float decimal) {
		System.out.println("Cadena: " + cadena);
		System.out.println("Numero entero: " + numero);
		System.out.println("Numero flotante: " + decimal);
		System.out.println("Valor logico: " + boleano);
	}
	
	public static boolean retornaValores(String cadena, Integer numero, Boolean boleano, Float decimal) {
		System.out.println("Cadena: " + cadena);
		System.out.println("Numero entero: " + numero);
		System.out.println("Numero flotante: " + decimal);
		System.out.println("Valor logico: " + boleano);
		decimal = 3.1416f;
		
		return cadena.equals("FIN") ? true : false;
	}
	
	public static ReturnedObject retornaObjeto(String cadena, Integer numero, Boolean boleano, Float decimal) {
		ReturnedObject objeto = new ReturnedObject(cadena, numero, boleano, decimal);
		return objeto;
	}
}
